import java.util.Arrays;
import java.util.Scanner;

public class Day39 {
    // write your code here

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            String m = scan.next();
            String n = scan.next();
            int lenM = m.length();
            int lenN = n.length();
            // 我们需要给字符串前面加空格，便于后面的字符串比较，所以大小设为 lenM+1和lenN+1
            int[][] arr = new int[lenM + 1][lenN + 1];
            for (int i = 1; i <= lenM; i++) {
                for (int j = 1; j <= lenN; j++) {
                    // 依次比较两个字符串的每一个字符，但要注意是字符串，要用charAt()函数获取每个字符
                    if (m.charAt(i - 1) == n.charAt(j - 1)) {
                        // 这里就是运用上面的状态方程
                        arr[i][j] = arr[i - 1][j - 1] + 1;
                    } else {
                        arr[i][j] = Math.max(arr[i - 1][j], arr[i][j - 1]);
                    }
                }
            }
            //  最后为什么要打印这个值，有上面图可以看出 比较结果为4 的位置有多个， 这里是因为，只有arr[lenM][lenN]处的数值，才能代表是两个字符串wan'zhen
            System.out.println(arr[lenM][lenN]);

        }
    }
}
